#pragma once

using namespace std;
#include <iostream>
#include <stack>
#include <assert.h>

class MinStack {
public:
    MinStack()
    {
    }

    void push(int val) {
        st.push(val);
        if (empty(stmin))
        {
            stmin.push(val);
        }
        else
        {
           if (val <= stmin.top())
                stmin.push(val);
        }
    }

    void pop() {
        assert(!st.empty());
        if (st.top() == stmin.top())
        {
            stmin.pop();
            st.pop();
        }
        else
        {
            st.pop();
        }
    }

    int top() {
        return st.top();
    }

    int getMin() {
        return stmin.top();
    }

private:
    stack<int> st;
    stack<int> stmin;
};